package com.dd.probe.web.service.impl;

import com.dd.probe.common.convertor.HostInfoConverter;
import com.dd.probe.common.pojo.BO.HostInfoBO;
import com.dd.probe.common.pojo.VO.HostInfoVO;
import com.dd.probe.common.pojo.param.SSHConnParam;
import com.dd.probe.web.service.internalApi.ServerMetricsCollectService;
import com.dd.probe.web.service.task.ServerInfoBOTask;
import com.jcraft.jsch.JSch;
import com.jcraft.jsch.JSchException;
import com.jcraft.jsch.Session;
import org.springframework.stereotype.Service;

/**
 * @Author liuxianmeng
 * @CreateTime 2024/12/14 13:21
 * @Description 提供服务端指标收集服务
 */
@Service
public class ServerMetricsCollectServiceImpl implements ServerMetricsCollectService {

    /**
     * 返回当前服务器的系统监控信息 信息的更新交给定时服务
     */
    @Override
    public HostInfoVO hostInfo() {
        return HostInfoConverter.hostInfoBO2VO(ServerInfoBOTask.hostInfoBO);
    }

    @Override
    @Deprecated
    public Boolean isOnline(String hostIP) {
        SSHConnParam sshConnParam = SSHConnParam.builder().IP(hostIP)
                .port(22).username("root").password("zxcvbnml").build();
        return isServerUp(sshConnParam);
    }

    /**
     * 提供目标连接服务器的在线情况
     * @param param 连接参数
     */
    @Deprecated
    public static boolean isServerUp(SSHConnParam param) {
        String hostname = param.getIP();
        int port = param.getPort();
        String username = param.getUsername();
        String password = param.getPassword();
        JSch jsch = new JSch();
        try {
            Session session = jsch.getSession(username, hostname, port);
            session.setPassword(password);
            // 避免第一次连接时询问是否接受密钥
            session.setConfig("StrictHostKeyChecking", "no");
            session.connect(5000); // 尝试连接，超时时间为 5 秒
            if (session.isConnected()) {
                session.disconnect();
                return true;
            }
        } catch (JSchException e) {
            // 连接失败，可能是服务器宕机或其他原因
            return false;
        }
        return false;
    }
}
